.. _ecmSxCfg_PosCorr_SetTableFromFile: ecmSxCfg_PosCorr_SetTableFromFile ================================= --------------------------------- SYNOPSIS -------- .. code-block:: none t_i32 ecmSxCfg_PosCorr_SetTableFromFile( t_i32 NetID, t_i32 Axis, char *szFilePath, t_i32 *ErrCode ) DESCRIPTION ----------- - 이 함수는 파일에 저장 되어 있는 테이블 데이터 값을 로드하여 테이블에 저장하는 함수 입니다. - 이 함수를 사용하면 사용자는 ecmSxCfg_PosCorr_SetTableSize 함수와 ecmSxCfg_PosCorr_SetTableData 함수를 따로 사용할 필요가 없습니다. PARAMETER --------- - NetID : Network 번호 - Axis : 대상 축 번호 - szFilePath : 파일 경로 - ErrCode : 이 매개 변수를 통하여 현재의 에러 코드를 반환합니다. 단, 이 매개 변수에 NULL을 전달하면 에러 코드를 반환하지 않습니다. RETURN VALUE ------------ - 함수 수행의 성공 여부를 반환합니다. +-------+--------------------------------------+ | Value | Meaning | +=======+======================================+ | 0 | 함수 수행에 실패하였음을 의미합니다. | +-------+--------------------------------------+ | 1 | 함수 수행에 성공하였음을 의미합니다. | +-------+--------------------------------------+ REFERENCE ---------- 이 함수에 전달되는 파일은 아스키 텍스트 파일이며 그 내용은 아래와 같이 "기준위치, 실제모터데이터" 쌍을 세로로 나열하면 됩니다. RefPos1, ActMotorPos1 RefPos2, ActMotorPos2 … 예를 들어서 아래 그림과 같이 겐트리(Gantry) 구성되어 있는 구조가 있다고 가정하고, 마스터와 슬레이브가 완전히 정렬이 되는 위치의 관계가 아래와 같다고 가정합니다. .. image:: ecmSxCfg_PosCorr_SetTableFromFile_00.jpg 이런한 경우에 보정테이블 파일의 내용은 아래와 같이 구성합니다. 0, 0 1000, 999 2000, 1988 3000, 2953 4000, 4010 5000, 5024 위와 같이 구성하면 ecmSxCfg_PosCorr_SetTableFromFile 함수 안에서는 유효한 위치 데이터쌍의 라인을 카운트하여 테이블 크기를 자동으로 설정하므로 테이블 크기 설정을 따로 할 필요 없습니다. EXAMPLE --------- .. code-block:: none :linenos: < 예제 설명 > 위의 REFERENCE에서 예시한 보정테이블 파일을 "C:\ PosCorr.txt" 파일로 저장했다고 가정하고 이를 적용하는 예제입니다. #define NETID 0 #define AXIS 0 // 1차원위치보정테이블을 파일을 통해서 설정 // ecmSxCfg_PosCorr_SetTableFromFile (NETID, AXIS, "c:\\PosCorr.txt", NULL); // 2차원보정 기능 활성화 // ecmSxCfg_PosCorr_SetEnable (NETID, TARGET_AXIS, true, NULL); // 이후에 AXIS가 이송(단축, 보간, 마스터-슬레이브 등 어떤 이송이든 모두 적요)될 때는 보정테이블이 적용되어서 논리좌표에 대응되는 보정좌표로 모터가 이송되게 됨// … ecmSxMot_MoveTo (NETID, AXIS, 5000, NULL); t_f64 fLogicPos = ecmSxSt_GetPosition (NETID, AXIS, ecmCNT_COMM, NULL); t_f64 fActualPos = ecmSxSt_GetPosition (NETID, AXIS, ecmCNT_COMM_CORR, NULL); printf("Logical Commnd Position = %.0f\n Actual Motor Command Position = %.0f\n", fLogicPos fActualPos); < 실행 결과 > Logical Commnd Position = 5000 Actual Motor Command Position = 5024